home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / lang / amigatalk.lha / codelib / MVCObject.st
Text File  |  2001-06-20  |  3KB  |  99 lines

  1. "-----------------------------------------------------------------"
  2. " MVCObject Class is used to create Model-View-Controller Objects."
  3. " These types of objects have dependency capabilities.            "
  4. "-----------------------------------------------------------------"
  5.  
  6. Class MVCObject :Object ! dependentsCollection eventsCollection !
  7. [
  8.    new
  9.       dependentsCollection <- KeyedCollection new.
  10.       eventsCollection     <- KeyedCollection new.
  11.  
  12.       ^ self
  13. |
  14.    myDependents
  15.       ^ dependentsCollection at: self ifAbsent: []
  16. |
  17.    myDependents: aCollectionOrNil
  18.       (aCollectionOrNil == nil)
  19.          ifTrue: [dependentsCollection removeKey: self ifAbsent: []]
  20.         ifFalse: [dependentsCollection at: self put: aCollectionOrNil]
  21. |
  22.    dependents
  23.       ^ self myDependents ifNil: [#()]
  24. |
  25.    changed
  26.       self changed: nil
  27. |
  28.    changed: anAspectSymbol
  29.       self changed: anAspectSymbol with: nil
  30. |
  31.    changed: anAspectSymbol with: aParameter
  32.       self myDependents update: anAspectSymbol with: aParameter from: self
  33. |
  34.    update: anAspectSymbol with: aParameter from: aSender
  35.       ^ self update: anAspectSymbol with: aParameter
  36. |
  37.    update: anAspectSymbol with: aParameter from: aSender
  38.       ^ self update: anAspectSymbol
  39. |
  40.    update: anAspectSymbol
  41.       ^ self
  42. |
  43.    expressInterestIn: anAspectSymbol for: aDependent sendBack: aSelector
  44. |
  45.    retractInterestIn: anAspectSymbol for: aDependent
  46. |
  47.    onChangeSend: aSelector to: aDependent
  48. |
  49.    breakDependents
  50.       self myDependents: nil
  51. |
  52.    release
  53.       self breakDependents.
  54.       self removeAllEventsTriggered
  55. |
  56.    evaluate: actionBlock wheneverChangeIn: aspectBlock
  57.       ! viewerThenObject objectThenViewer !
  58.       
  59.       objectThenViewer <- self.
  60.       
  61.       viewerThenObject <- ObjectViewer on: objectThenViewer.
  62.       
  63.       objectThenViewer become: viewerThenObject.
  64.       
  65.       objectThenViewer xxxViewedObject: viewerThenObject
  66.                               evaluate: actionBlock
  67.                       wheneverChangeIn: aspectBlock
  68. |
  69.    canDiscardEdits
  70.       self dependents do: [:each | each canDiscardEdits ifFalse: [^ false]
  71.                           ]
  72.                  without: self.
  73.       ^ true
  74. |
  75.    hasUnacceptedEdits
  76.       self dependents do: [:each | each hasUnacceptedEdits ifTrue: [^ true]
  77.                           ]
  78.                  without: self.
  79.       ^ false
  80. |
  81.    addDependent: anObject ! tempDependents !
  82.       tempDependents <- self dependents.
  83.       
  84.       (tempDependents includes: anObject)
  85.         ifFalse: [self myDependents: (tempDependents copyWith: anObject)].
  86.       
  87.       ^ anObject
  88. |
  89.    removeDependent: anObject ! tempDependents !
  90.       tempDependents <- self dependents reject: [:each | each == anObject].
  91.  
  92.       self myDependents: (tempDependents isEmpty 
  93.                             ifFalse: [tempDependents]
  94.                          ).
  95.  
  96.       ^ anObject
  97.    
  98. ]
  99.